package com.apes.framework.plugin.esb.processor.mapping.parser.node;

import com.apes.framework.plugin.esb.processor.mapping.parser.model.Config;
import com.apes.framework.plugin.filereader.xml.AbstractNodeParser;
import com.apes.framework.plugin.filereader.xml.ApesElement;
import org.dom4j.Element;
import org.springframework.stereotype.Component;

import java.util.HashMap;
import java.util.Map;

/**
 * 功能：config 节点解析器
 *
 * @author xul
 * @create 2018-04-18 11:42
 */
@Component
public class ConfigNodeParser extends AbstractNodeParser {
    private static Map configs = new HashMap();

    /**
     * 可解析的节点列表
     **/
    private final String[] nodeNames = {"config"};

    /**
     * 可解析节点域
     **/
    public static final String domain = "mapping";

    /**
     * 功能：可解析节点域
     */
    @Override
    public String getDomain() {
        return domain;
    }

    /**
     * 功能：可解析的根节点列表
     */
    @Override
    public String[] getNames() {
        return nodeNames;
    }

    /**
     * 功能：解析节点
     *
     * @param node
     */
    @Override
    public ApesElement parse(Element node) {
        ApesElement element = super.parse(node);
        if(element == null) return null;
        Config config = element.parse();
        configs.put(config.getId(), config);
        return element;
    }

    public static Config getConfig(String key) {
        Config config = (Config) configs.get(key);
        if (config == null) {
            throw new RuntimeException("Mapping id： " + key + " 没有配置！");
        }
        return config;
    }
}
